//
// Created by 赵路 on 2021/10/12.
//

#ifndef INC_19281121_2_DES_DES_H
#define INC_19281121_2_DES_DES_H

#include <bitset>

using namespace std;

static bitset<64> Key; // 存放密钥
static bitset<48> subKey[16]; // 存放子密钥

/* 工具函数：将字符数组转化为二进制 */
bitset<64> charToBitset(const char s[8]);

/* 循环左移函数 */
bitset<28> leftShift(bitset<28> k, int shift);

/* 子密钥生成函数 */
void generateKeys();

/* 轮函数 */
bitset<32> f(bitset<32> R, bitset<48> k);

/* 加密函数 */
bitset<64> encrypt(bitset<64> &plain);

/* 解密函数 */
bitset<64> decrypt(bitset<64> &cipher);

#endif //INC_19281121_2_DES_DES_H
